<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
        题目描述：给你一个整数数组 nums ，请你找出数组中乘积最大的连续子数组（该子数组中至少包含一个数字），并返回该子数组所对应的乘积。
        */
       /* 
       题目分析：
       子问题化：max[n]表示以n截至的连续子数组的最大乘积，min[n]表示以n截至的连续子数组的最小乘积，这样
       转移方程
       max[n] = Math.max(nums[n],max[n - 1] * nums[n], min[n - 1] * nums[n])
       min[n] = Math.min(nums[n],max[n - 1] * nums[n], min[n - 1] * nums[n])
       */
      function maxProduct(nums){
          // 初始化
          let len = nums.length
          if(len === 0) return 0
          let Max = new Array(len).fill(1)
          let Min = new Array(len).fill(1)
          Max[0] = nums[0]
          Min[0] = nums[0]
          for(let n = 1; n < len; n++){
            Max[n] = Math.max(nums[n], Max[n - 1] * nums[n], Min[n - 1] * nums[n])
            Min[n] = Math.min(nums[n], Max[n - 1] * nums[n], Min[n - 1] * nums[n])
          }
        return Max.sort((a, b)=>(a - b))[len - 1]
      }
      console.log(maxProduct([2,3,-2,4]))
    </script>
</body>
</html>